// 该脚本对本地驱动有依赖，需要安装 UsbDk 后端，参考 https://github.com/daynix/UsbDk/wiki/Installation
const usb = require('usb');
// 使用 UsbDk 后端
usb.useUsbDkBackend();

// 查询 USB 设备列表
let deviceList = usb.getDeviceList();
for (let i = 0; i < deviceList.length; i++) {
    let device = deviceList[i];
    console.log(`设备 ${i + 1}: VID_${device.deviceDescriptor.idVendor.toString(16)}:PID_${device.deviceDescriptor.idProduct.toString(16)}`);
}

// 查找指定的 USB 设备
function findUSBDevice(vid, pid) {
    return usb.findByIds(vid, pid);
}

// 修改 USB 设备的 VID 和 PID
function modifyUSBDeviceVIDPID(device, newVid, newPid) {
    try {
        device.open();
        console.log(`尝试修改 VID 为 ${newVid.toString(16)}，PID 为 ${newPid.toString(16)}`);
        device.controlTransfer(0x40, 0x01, newVid, newPid, Buffer.alloc(0), (error, data) => {
            if (error) {
                if (error.message.includes('LIBUSB_ERROR_NOT_SUPPORTED')) {
                    console.error('此设备不支持通过软件修改 VID 和 PID，请使用设备制造商提供的工具。');
                } else {
                    console.error('修改失败:', error);
                }
            } else {
                console.log('修改成功');
            }
            device.close();
        });
    } catch (error) {
        console.error('打开设备时出错:', error);
    }
}

// 示例使用
const oldVid = 0x1234; // 替换为实际的旧 VID
const oldPid = 0x5678; // 替换为实际的旧 PID
const newVid = 0xABCD; // 替换为新的 VID
const newPid = 0xEF01; // 替换为新的 PID

const device = findUSBDevice(oldVid, oldPid);
if (device) {
    modifyUSBDeviceVIDPID(device, newVid, newPid);
} else {
    console.log('未找到指定的 USB 设备');
}
